// 把处理3个token的方法进行导入
import { getToken, setToken, removeToken } from '@/utils/auth'
// 导入登录的方法, 获取用户的基本数据
import { login, getUserInfo } from '@/api/user'
// 导入静态路由
import { constantRoutes } from '@/router'
// 引入重置路由
import { resetRouter } from '@/router'
// 存放数据
const state = {
  token: getToken(), // 直接从缓存中读取token
  userInfo: {}, // 存储用户的基本资料状态
  routes: constantRoutes // 静态路由的数组
}
// 修改数据
const mutations = {
  // 修改token的方法
  setToken(state, token) {
    state.token = token
    // 拿到toktn后同步到缓存
    setToken(token)
  },
  // 删除token 退出操作
  removeToken(state) {
    // 先把当前的token值改为null
    state.token = null
    // 删除缓存的token
    removeToken()
  },
  // 修改用户信息的状态
  setUserInfo(state, userInfo) {
    state.userInfo = userInfo
  },
  setRoutes(state, newRoutes) {
    state.routes = [...constantRoutes, ...newRoutes] // 静态路由+动态路由
  }

}
// 处理异步
const actions = {
  // 第一个参数: context上下文 第二个参数: 接收的手机号和密码
  async login(context, data) {
    // data拿到了输入的手机号和密码
    // mobile: 手机号 password: 密码
    // console.log(data)
    // 调用登录接口```````````````````````
    const token = await login(data)
    // console.log(token)
    // 把获取到的token传到修改方法进行修改
    context.commit('setToken', token)
  },
  // 获取用户的基本资料
  async getUserInfo(context) {
    const result = await getUserInfo()
    context.commit('setUserInfo', result)
    return result // 返回数据
  },
  // 退出登录的action
  logout(context) {
    // 删除token
    context.commit('removeToken')
    // 删除用户信息(就是把用户信息设置为空)
    context.commit('setUserInfo', {})
    // 重置路由
    resetRouter()
  }
}

// 导出
export default {
  namespaced: true, // 开启命名空间
  state,
  mutations,
  actions
}
